import java.util.ArrayList;
import java.util.List;

class Solution54 {
   private  List<Integer> list = new ArrayList<>() ;
    public List<Integer> spiralOrder(int[][] matrix) {
         int n = matrix.length ;
         int m = matrix[0].length ; 
         getList(matrix , 0 , n-1 , 0 , m-1) ; 
          return list ;
    }
    private void getList(int[][] matrix ,int top ,int bottom ,int left ,int right ) {
        if(top > bottom || left > right) return  ;
       for(int i=left ; i <= right ; i ++){
          list.add(matrix[top][i]);
       }
       for(int i=top+1 ; i <= bottom ; i ++){
          list.add(matrix[i][right]);
       }
       for(int i=right-1 ; i >=left&&top!=bottom ; i --){
         list.add(matrix[bottom][i]);
       }
       for(int i=bottom-1 ; i >top&&left!=right ; i--){
        list.add(matrix[i][left]);
       }
        
     getList(matrix , top+1 , bottom-1 , left+1 , right-1 ) ; 
    } 
}